package studydeom.service.simple;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import studydeom.config.SimpleMQConfig;
import studydeom.pojo.Order;

/**
 * @author xn
 * @date 2022/11/23 7:40
 */
@Service
@Slf4j
public class SimpleConsumer {

    @RabbitListener(queues = {SimpleMQConfig.SIMPLE_QUEUE_NAME})
    @RabbitHandler
    public void receiveMessage(String message) {
        log.info("simple consumer receive the message:{}", message);
    }

    /**
     * 用RabbitMQ踩的坑，明明生产者用User对象传过去，消费端用User对象接，但是一直报错，本地定义生产者和消费者的话，又没有问题。百思不得其解，后来才知道AMQP协议，传对象的话，必须全类名必须相等，同时工程目录结构必须相等。他才认可是同一对象，不然的话，还是老老实实用String , List ， Map 这些传，消费端接到了再转类型出来吧～
     *
     * 在这会报错，因为我是把order放到两个模块了，所以使用不了，如果把消费者和生产者以及order放一个模块就可以正常使用了
     *
     * @param order
     * @throws JsonProcessingException
     */
    @RabbitListener(queues = {SimpleMQConfig.HANDLER_OBJECT_QUEUE_NAME})
    @RabbitHandler
    public void receiveObject(Order order) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String message = objectMapper.writeValueAsString(order);
        log.info("simple consumer receive the object:{}", message);
    }
}
